# -*- coding: utf-8 -*-

#带numpy fft 的频域高斯模糊滤波器
from matplotlib import pylab
from skimage.io import imread
import numpy as np
import scipy.fftpack as fp
from scipy import signal


im=np.mean(imread('lena.jpg'),axis=2)
gauss_kernel=np.outer(signal.gaussian(im.shape[0],5),signal.gaussian(im.shape[1],5))
freq=fp.fft2(im)
assert(freq.shape==gauss_kernel.shape)#宏函数，如果条件为True程序继续运行，如果条件为False程序终止
freq_kernel=fp.fft2(fp.ifftshift(gauss_kernel))
convolved=freq*freq_kernel#
im1=fp.ifft2(convolved).real
pylab.figure(figsize=(12,15))
pylab.gray()
pylab.subplot(231)
pylab.imshow(im)
pylab.title('Original Image',size=15)
pylab.axis('off')

pylab.subplot(232)
pylab.imshow(gauss_kernel)
pylab.title('Gausssian_kernel Image',size=15)
pylab.axis('off')

pylab.subplot(233)
pylab.imshow(im1)
pylab.title('Output Image',size=15)
pylab.axis('off')

pylab.subplot(234)
pylab.imshow((20*np.log10(0.1+fp.fftshift(freq))).astype(int))
pylab.title('Original Image Spectrum',size=15)
pylab.axis('off')

pylab.subplot(235)
pylab.imshow((20*np.log10(0.1+fp.fftshift(freq_kernel))).astype(int))
pylab.title('Gaussian Kernel Spectrum',size=15)
pylab.axis('off')

pylab.subplot(236)
pylab.imshow((20*np.log10(0.1+fp.fftshift(convolved))).astype(int))
pylab.title('Output Image Spectrum',size=15)
pylab.axis('off')
pylab.subplots_adjust(wspace=0.2,hspace=0)
pylab.show()
